package rmi;

import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import java.rmi.server.UnicastRemoteObject;

import dao.CotizacionDAO;

public class BS {

	private IPerCotizacion persistencia=new CotizacionDAO();
	
	
	public void publicarServicio(){
		try {
			System.out.println(IPerCotizacion.class.toString());
			System.out.println(IPerCotizacion.class.getProtectionDomain().getCodeSource().getLocation().toString());
			
			//propieda para enlazar un archivo de texto "java.policy" con la propiedad de java. 
			System.setProperty("java.security.policy", "java.policy");
			//
			System.setProperty("java.rmi.server.codebase", 
					IPerCotizacion.class.getProtectionDomain().getCodeSource().getLocation().toString());
	        
			if(System.getSecurityManager() == null) {
				//Establece un sistema de seguridad. 
	            System.setSecurityManager(new SecurityManager());
	        } 
			
			//genera un "stub", STUB trabaja como si fuera un proxy. Exporta el objeto calculable. 
			//Se define el STUB. 
			IPerCotizacion stub = (IPerCotizacion) UnicastRemoteObject.exportObject(persistencia, 0);
			//POne en memoria a la registry de RMI. 
			//Sirve para publicar servicios. 
			//Si el registry ya existe, se debe usar el GetRegistry. 
			LocateRegistry.createRegistry(Registry.REGISTRY_PORT);
			//Hace la union entre el objeto y el nombre. (servicio de nombrado) 
			//bind y rebind hacen lo mismo. Rebind registra con un nombre el objeto, pero si el nombre existe lo reemplaza. 
			Naming.rebind("//localhost/PerCotizacion", stub);
			System.out.println(Naming.list("")[0]);
		} catch (RemoteException | MalformedURLException e) {
			e.printStackTrace();
		}
	}
	
}
